<!DOCTYPE html>
<html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-0 vector-toc-not-available vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-0 skin-theme-clientpref-day vector-sticky-header-enabled" lang="de" dir="ltr"><head>
<meta charset="UTF-8">
<title>Bc (Unix)</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/png" href="./_res_/favicon.png">
<link rel="canonical" href="https://de.wikipedia.org/wiki/Bc_(Unix)"> <link href="./_mw_/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.wikimediamessages.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link href="./_mw_/ext.gadget.citeRef.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.defaultPlainlinks.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonHide.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonLayout.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonStyle.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiDarkmode.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiResponsive.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.specialSearch.css" rel="stylesheet" type="text/css">
<link rel="stylesheet" type="text/css" href="./_mw_/site.styles.css">
<link rel="stylesheet" type="text/css" href="./_mw_/noscript.css">
<link rel="stylesheet" type="text/css" href="./_res_/footer.css">
<link rel="stylesheet" type="text/css" href="./_res_/vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Bc_Unix rootpage-Bc_Unix skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading">bc (Unix)</h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="contentSub">
<div id="mw-content-subtitle"></div>
</div>
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="de" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="de" dir="ltr"><p><b>bc</b> (kurz für <i>basic calculator</i>) ist eine numerische <a href="Programmiersprache" title="Programmiersprache">Programmiersprache</a>, die an die <a href="Syntax" title="Syntax">Syntax</a> von <a href="C_(Programmiersprache)" title="C (Programmiersprache)">C</a> angelehnt ist, sowie ein durch den <a href="Portable_Operating_System_Interface" class="mw-redirect" title="Portable Operating System Interface">POSIX</a>-Standard genormter <a href="Interpreter" title="Interpreter">Interpreter</a>, der diese Programmiersprache implementiert und dessen Vorhandensein in dem standardkonformen Betriebssystemen vorgeschrieben ist. Das herausstellende Merkmal von <i>bc</i> ist die Fähigkeit, mit <a href="Gleitkommazahl" title="Gleitkommazahl">Gleitkommazahlen</a> (fast) beliebig großer <a href="Genauigkeit" title="Genauigkeit">Genauigkeit</a> zu rechnen; die Grenze liegt je nach Version bei mindestens mehreren tausend Stellen, meist aber bei mehreren Millionen bis Milliarden. Die ersten Versionen wurden von <a href="Lorinda_Cherry" title="Lorinda Cherry">Lorinda Cherry</a> bei den <a href="Bell_Laboratories" title="Bell Laboratories">Bell Labs</a> entwickelt.
</p>
<div class="mw-heading mw-heading2"><h2 id="Arbeitsweise">Arbeitsweise</h2></div>
<p>Der Interpreter folgt, vom POSIX-Standard so festgelegt,<sup id="cite_ref-posixbc_1-0" class="reference"><a href="#cite_note-posixbc-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup> den üblichen Anforderungen an <i>Utilities</i>, den sogenannten <i>Utility Syntax Guidelines</i>.<sup id="cite_ref-posixutil_2-0" class="reference"><a href="#cite_note-posixutil-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup> Als Eingabe werden entweder (Text-)Dateien oder Input auf <code><stdin></code> erwartet. Ziel der Ausgabe ist in jedem Fall <code><stdout></code>, Fehlermeldungen gehen nach <code><stderr></code>.
</p><p><i>bc</i> verwendet keine eventuell verfügbaren Gleitkommaeinheiten eines Rechners, sondern arbeitet intern nur mit <a href="Integer_(Datentyp)" title="Integer (Datentyp)">Integers</a>; die Gleitkommafähigkeit wird per <a href="Software" title="Software">Software</a> hergestellt. Nur so kann die Sprache diese hohen und von verfügbarer Hardware unabhängigen Genauigkeiten erreichen. Allerdings ist <i>bc</i> damit auch prinzipbedingt wesentlich langsamer als Software, die diese Einrichtungen benutzt.
</p><p>Nicht nur die zu erzielende Rechengenauigkeit kann festgelegt werden, <i>bc</i> ist in der Lage, mit beliebigen (Zahlen-)Basen zu arbeiten und diese ineinander umzurechnen. Bis zur Basis 16 wird die übliche Schreibweise verwendet und Ziffern jenseits der 9 durch die Buchstaben A bis F dargestellt. Die Ziffern in Basen größer 16 werden hingegen als aus mehreren (dezimalen) Einzelziffern bestehende Zahlen dargestellt, die durch ein Trennzeichen (meist ein <i>Blank</i>) getrennt sind. Dabei werden für die Basen 17-100 zweistellige, für die Basen 101-1000 dreistellige Dezimalzahlen und so fort verwendet. Siehe auch die Anwendungsbeispiele weiter unten.
</p><p>Die von POSIX standardisierte <i>bc</i>-Sprache ist in ihrer Struktur an C angelehnt und in demselben Dokument ebenfalls (in Form einer <a href="LL(k)-Grammatik" title="LL(k)-Grammatik">LL1-Grammatik</a>) festgelegt (unter <i>Extended Description</i>).<sup id="cite_ref-posixbc_1-1" class="reference"><a href="#cite_note-posixbc-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup> Von Haus aus enthält <i>bc</i> nur einige Grundfunktionen wie etwa die <a href="Exponentialfunktion" title="Exponentialfunktion">Exponentialfunktion</a>, die <a href="Trigonometrische_Funktion" title="Trigonometrische Funktion">trigonometrischen Funktionen</a> und den <a href="Logarithmus#Natürlicher_Logarithmus" title="Logarithmus">natürlichen Logarithmus</a>. Es können jedoch weitere Funktionen selbst definiert werden.
</p>
<div class="mw-heading mw-heading2"><h2 id="Varianten">Varianten</h2></div>
<div class="mw-heading mw-heading3"><h3 id="GNU_bc">GNU bc</h3></div>
<p><a href="GNU-Projekt" title="GNU-Projekt">GNU</a>-<i>bc</i> ist ein Nachbau von POSIX-<i>bc</i>, weist allerdings gegenüber dem Standard zahlreiche Änderungen auf. Es ist, anders als manche sonstigen Varianten, von Grund auf in C geschrieben und baut nicht auf <a href="Dc_(Unix)" title="Dc (Unix)">dc</a> auf. Die GNU-Variante erweitert die POSIX-Variante um zusätzliche Funktionen.
</p><p>Zu den Unterschieden zählen erweiterte Möglichkeiten zur Benennung von Variablen, Arrays und Funktionen, eine erweiterte <a href="Bedingte_Anweisung_und_Verzweigung" title="Bedingte Anweisung und Verzweigung">if-Anweisung</a> und anderes.
</p>
<div class="mw-heading mw-heading2"><h2 id="Beispiele">Beispiele</h2></div>
<p>Die folgenden Beispiele sind mit einem POSIX-<i>bc</i> unter <a href="AIX" title="AIX">AIX</a> (Version 7.1.5, TL 1) erzeugt. Ausgaben sind im Folgenden <b>fett</b> gesetzt:
</p>
<div class="mw-heading mw-heading3"><h3 id="Berechnungen">Berechnungen</h3></div>
<p>Dieses Beispiel zeigt, wie erst eine Funktion definiert wird, die <a href="Rekursion" title="Rekursion">nonrekursiv</a> die <a href="Fakult%C3%A4t_(Mathematik)" title="Fakultät (Mathematik)">Fakultät</a> errechnet. Danach wird diese Funktion aufgerufen um <code>10!</code> auszugeben. Das Beispiel ist der <a href="Manpage" title="Manpage">man page</a> für <i>bc</i> unter AIX entnommen.
</p>
<pre><b>user@system $</b> bc
define f(n) {
auto i, r;
r = 1;
for (i=2; i<=n; i++) r *= i;
return (r);
}
f(10)
<b>3628800</b>
</pre>
<div class="mw-heading mw-heading3"><h3 id="Wechsel_und_Umrechnung_verschiedener_Basen">Wechsel und Umrechnung verschiedener Basen</h3></div>
<p><i>bc</i> unterscheidet zwischen der Basis für die Eingabe (<i>ibase</i>) und die Ausgabe (<i>obase</i>). Etwa lautet die Darstellung der Zahl <i>1024</i> (dezimal) zu den Basen 25 und 125:
</p>
<pre><b>user@system $</b> bc
obase=25
1024
<b> 01 15 24</b>
obase=125
1024
<b> 008 024</b>
</pre>
<div class="mw-heading mw-heading2"><h2 id="Weblinks">Weblinks</h2></div>
<ul><li><code><a rel="nofollow" class="external text" href="https://pubs.opengroup.org/onlinepubs/9799919799/utilities/bc.html">bc</a></code>: arbitrary-precision arithmetic language – <a href="Open_Group" title="Open Group">Open Group</a> Base Specification</li>
<li><code><a rel="nofollow" class="external text" href="https://man.openbsd.org/cgi-bin/man.cgi?query=bc&sec=1">bc(1)</a></code>: arbitrary-precision arithmetic language and calculator – <a href="OpenBSD" title="OpenBSD">OpenBSD</a> General Commands <a href="Manpage" title="Manpage">Manual</a></li>
<li><a rel="nofollow" class="external text" href="http://www.gnu.org/software/bc/bc.html">GNU bc</a> Beschreibung (englisch)</li>
<li><a rel="nofollow" class="external text" href="http://directory.fsf.org/gnu/bc.html">Free Software Directory</a>, Übersicht der Free Software Foundation zu bc (englisch)</li>
<li><a rel="nofollow" class="external text" href="http://sciencesoft.at/index.jsp?link=bc">GNU bc</a> zum Ausprobieren</li>
<li>Detlef Borchers: <a rel="nofollow" class="external text" href="https://heise.de/-6481093"><span style="font-style:italic;">"He who touched it last, owned it": Zum Tode der Unix-Pionierin Lorinda Cherry.</span></a> In: <i><a href="Heise_online" title="Heise online">Heise online</a>.</i> <span style="white-space:nowrap;">17. Februar 2022</span>. Abgerufen am 17. Februar 2022.; Zitat: „<a href="Lorinda_Cherry" title="Lorinda Cherry">Lorinda Cherry</a> war bereits in der ersten Unix-Version vom November 1971 mit dem Programm dc (Desk Calculator) vertreten. Damit begann ihre rege Tätigkeit.“.</li></ul>
<div class="mw-heading mw-heading2"><h2 id="Einzelnachweise">Einzelnachweise</h2></div>
<ol class="references">
<li id="cite_note-posixbc-1"><span class="mw-cite-backlink">↑ <sup><a href="#cite_ref-posixbc_1-0">a</a></sup> <sup><a href="#cite_ref-posixbc_1-1">b</a></sup></span> <span class="reference-text"><span class="cite"><a rel="nofollow" class="external text" href="http://pubs.opengroup.org/onlinepubs/9699919799/utilities/bc.html"><i>bc-Spezifikation des POSIX-Standards.</i></a><span class="Abrufdatum"> Abgerufen am 25. April 2019</span> (englisch).</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&rfr_id=info%3Asid%2Fde.wikipedia.org%3ABc+%28Unix%29&rft.title=bc-Spezifikation+des+POSIX-Standards&rft.description=bc-Spezifikation+des+POSIX-Standards&rft.identifier=http%3A%2F%2Fpubs.opengroup.org%2Fonlinepubs%2F9699919799%2Futilities%2Fbc.html&rft.language=en"> </span></span>
</li>
<li id="cite_note-posixutil-2"><span class="mw-cite-backlink"><a href="#cite_ref-posixutil_2-0">↑</a></span> <span class="reference-text"><span class="cite"><a rel="nofollow" class="external text" href="http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html#tag_12_02"><i>Utility Syntax Guidelines.</i></a><span class="Abrufdatum"> Abgerufen am 25. April 2019</span> (englisch).</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&rfr_id=info%3Asid%2Fde.wikipedia.org%3ABc+%28Unix%29&rft.title=Utility+Syntax+Guidelines&rft.description=Utility+Syntax+Guidelines&rft.identifier=http%3A%2F%2Fpubs.opengroup.org%2Fonlinepubs%2F9699919799%2Fbasedefs%2FV1_chap12.html%23tag_12_02&rft.language=en"> </span></span>
</li>
</ol></div><!--htdig_noindex--><div><div class="zim-footer">
Dieser Artikel wurde von <a class="external text" title="Zuletzt bearbeitet am 2022-03-23" href="https://de.wikipedia.org/wiki/?title=Bc_(Unix)&oldid=221424382">Wikipedia</a> herausgegeben. Der Text ist unter <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.de">Creative Commons Attribution-Share Alike 4.0</a> verfügbar, sofern nicht anders angegeben. Für die Mediendateien können zusätzliche Bedingungen gelten.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
<script src="./_webp_/webpHandler.js"></script>
</body></html>